﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using System.Collections.ObjectModel;
using System.Data;
using produccion.reportes;
using produccion.vistamodelo;
using System.ComponentModel;

namespace produccion.forms
{
    /// <summary>
    /// Lógica de interacción para FRMinfProProc.xaml
    /// </summary>
    public partial class FRMinfProProc : Window
    {
        public FRMinfProProc()
        {
            InitializeComponent();
        }

        private void butSal_Click(object sender, RoutedEventArgs e)
        {
            this.Close();
        }

        private void dataGrid1_PreviewKeyDown(object sender, KeyEventArgs e)
        {
            var elemento = e.OriginalSource as UIElement;
            if (e.Key == Key.Enter && elemento != null)
            {
                e.Handled = true;
                elemento.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));
            }
        }

        private void Window_KeyDown(object sender, KeyEventArgs e)
        {
            var elemento = e.OriginalSource as UIElement;
            if (e.Key == Key.F3 && elemento != null)
            {
                if (MDOgeneral.logBusquedadAbierta == true) { MDOgeneral.logBusquedadAbierta = false; }
            }

            if (e.Key == Key.F4 && elemento != null)
            {
                if (MDOgeneral.logBusquedadAbierta1 == true) { MDOgeneral.logBusquedadAbierta1 = false; }
            }

            if (e.Key == Key.F5 && elemento != null)
            {
                if (MDOgeneral.logBusquedadAbierta2 == true) { MDOgeneral.logBusquedadAbierta2 = false; }
            }
        }

        private void dataGrid1_MouseDoubleClick(object sender, MouseButtonEventArgs e)
        {
            if (dataGrid1.SelectedItem == null)//FJRF - Si no hay algun pedido seleccionado hacemos lo siguiente
            {
                return;//FJRF - Nos salimos
            }
            else //FJRF - Si tiene datos hacemos lo siguiente
            {
                DataRowView dr = dataGrid1.SelectedItem as DataRowView;//FJRF - Cargamos un DataRowView con el dato seleccionado
                DataRow dr1 = dr.Row;//FJRF - Asignamos las finas
                String StrOrden = Convert.ToString(dr1.ItemArray[2]);//FJRF - Decimos que en la columna 0 nos traiga el dato de la fila seleccionada

                if (String.IsNullOrEmpty(StrOrden) == false)
                {
                    FRMconsordens _co = new FRMconsordens();
                    _co.texOrd.Text = StrOrden;
                    _co.texPed.Text = "0";
                    _co.texRef.Text = "";
                    _co.comCli.SelectedIndex = -1;
                    _co.comCol.SelectedIndex = -1;
                    _co.comSub.SelectedItem = -1;
                    _co.datePicker1.SelectedDate = Convert.ToDateTime("01/01/" + DateTime.Now.Year.ToString());
                    _co.filtraOrd();
                    _co.ShowDialog();
                }
            }
        }

        private void BtnExportarOFiltrarDatos_Click(object sender, RoutedEventArgs e)
        {

        }

    }

    public class infProProc : ObservableObject
    {
        #region singleton

        private static infProProc instance = null;

        public infProProc()
        {
            consClientes();
            consColecciones();

            buscarReferencia = new VMbuscarReferencia();
            buscarReferencia.TieneColor = false;
            buscarReferencia.PropertyChanged += onBuscarReferenciaPropertyChanged;

            MDOgeneral.conectar();
            strTituloVentana = "Informe de producto en proceso - Usuario: " + MDOgeneral.usuario + " - [FRMinfProProc]";
        }

        public static infProProc Instance
        {
            get
            {
                if (instance == null)
                    instance = new infProProc();
                return instance;
            }
            set
            {
                if (instance != null)
                    instance = null;
            }
        }
        #endregion

        private string _strTituloVentana;
        public string strTituloVentana
        {
            get { return _strTituloVentana; }
            set { _strTituloVentana = value; RaisePropertyChangedEvent("strTituloVentana"); }
        }

        private VMvisorFotoReferencia _visorFotoReferencia = new VMvisorFotoReferencia();
        public VMvisorFotoReferencia visorFotoReferencia
        {
            get { return _visorFotoReferencia; }
            set { _visorFotoReferencia = value; RaisePropertyChangedEvent("visorFotoReferencia"); }
        }

        private VMbuscarReferencia _buscarReferencia;
        public VMbuscarReferencia buscarReferencia
        {
            get { return _buscarReferencia; }
            set { _buscarReferencia = value; RaisePropertyChangedEvent("buscarReferencia"); }
        }

        private string _strReferencia;
        public string strReferencia
        {
            get { return _strReferencia; }
            set 
            { 
                _strReferencia=value; 
                if (_strReferencia.Length == 4)
                {
                    clases.CLSMAEREF refe = new clases.CLSMAEREF { CODREF_REF = _strReferencia };
                    refe.Consultar();
                    strNombreReferencia = refe.NOMREF_REF;
                    visorFotoReferencia.strCodigo = _strReferencia;
                }
                RaisePropertyChangedEvent("strReferencia"); 
            }
        }

        private string _strNombreReferencia;
        public string strNombreReferencia
        {
            get { return _strNombreReferencia; }
            set { _strNombreReferencia=value; RaisePropertyChangedEvent("strNombreReferencia");}
        }


        private List<clases.CLSMAECLIP> _lisClie = new List<clases.CLSMAECLIP>();
        public List<clases.CLSMAECLIP> lisClie
        {
            get { return _lisClie; }
            set { _lisClie = value; RaisePropertyChangedEvent("lisClie"); }
        }

        private clases.CLSMAECLIP _selcli = new clases.CLSMAECLIP();
        public clases.CLSMAECLIP selcli 
        {
            get { return _selcli; }
            set { _selcli = value; RaisePropertyChangedEvent("selcli"); }
        }

        public void consClientes()
        {
            try
            {
                lisClie = new clases.CLSMAECLIP().listaCliente();
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }

        private List<clases.CLSMAECLCP> _lisCol = new List<clases.CLSMAECLCP>();
        public List<clases.CLSMAECLCP> lisCol
        {
            get { return _lisCol; }
            set { _lisCol = value; RaisePropertyChangedEvent("lisCol"); }
        }

        private clases.CLSMAECLCP _selcol = new clases.CLSMAECLCP();
        public clases.CLSMAECLCP selcol 
        {
            get { return _selcol; }
            set { _selcol = value; RaisePropertyChangedEvent("selcol"); }
        }

        public void consColecciones()
        {
            try
            {
                lisCol = new clases.CLSMAECLCP().listColecciones();
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }

        private string _codsec = "P";
        public string codsec
        {
            get { return _codsec; }
            set { _codsec = value; RaisePropertyChangedEvent("codsec"); }
        }

        private string _sepped = "N";
        public string sepped
        {
            get { return _sepped; }
            set { _sepped = value; RaisePropertyChangedEvent("sepped"); }
        }

        private string _sepord = "N";
        public string sepord
        {
            get { return _sepord; }
            set { _sepord = value; RaisePropertyChangedEvent("sepord"); }
        }

        private string _linmon = "N";
        public string linmon
        {
            get { return _linmon; }
            set { _linmon = value; RaisePropertyChangedEvent("linmon"); }
        }

        private string _incgar = "N";
        public string incgar
        {
            get { return _incgar; }
            set { _incgar = value; RaisePropertyChangedEvent("incgar"); }
        }

        private string _incprd = "N";
        public string incprd
        {
            get { return _incprd; }
            set { _incprd = value; RaisePropertyChangedEvent("incprd"); }
        }

        private string _incdev = "N";
        public string incdev
        {
            get { return _incdev; }
            set { _incdev = value; RaisePropertyChangedEvent("incdev"); }
        }

        private string _increp = "N";
        public string increp
        {
            get { return _increp; }
            set { _increp = value; RaisePropertyChangedEvent("increp"); }
        }

        private string _increc = "N";
        public string increc
        {
            get { return _increc; }
            set { _increc = value; RaisePropertyChangedEvent("increc"); }
        }
        private string _incser = "N";
        public string incser
        {
            get { return _incser; }
            set { _incser = value; RaisePropertyChangedEvent("incser"); }
        }

        private VMreutil.tallaje _tal = new VMreutil.tallaje();
        public VMreutil.tallaje tal
        {
            get { return _tal; }
            set { _tal = value; RaisePropertyChangedEvent("tal"); }
        }

        private DataTable _RepProPro = new DataTable();
        public DataTable RepProPro 
        {
            get { return _RepProPro; }
            set { _RepProPro = value; RaisePropertyChangedEvent("RepProPro"); }
        }

        private DataTable _RepProProExcel = new DataTable();
        public DataTable RepProProExcel
        {
            get { return _RepProProExcel; }
            set { _RepProProExcel = value; RaisePropertyChangedEvent("RepProProExcel"); }
        }

        private DataTable _dttResumen = new DataTable();
        public DataTable dttResumen
        {
            get { return _dttResumen; }
            set { _dttResumen = value; RaisePropertyChangedEvent("dttResumen"); }
        }

        private int _selRep;
        public int selRep 
        {
            get { return _selRep; }
            set 
            { 
                _selRep = value;
                if (_selRep != -1) 
                {
                    tal = new VMreutil.tallaje();
                    tal.codref = RepProPro.Rows[_selRep]["CODREF_TMP"].ToString();
                    visorFotoReferencia.strCodigo = RepProPro.Rows[_selRep]["CODREF_TMP"].ToString(); ;
                }
                RaisePropertyChangedEvent("selRep");
            }
        }

        public void consInforme() 
        {
            try 
            {
                Mouse.OverrideCursor = Cursors.Wait;
                clases.CLSMAEREF mae = new clases.CLSMAEREF();
                mae.RepProPro(codsec, selcli != null ? selcli.CODCLI_CLI : "", sepped, sepord, linmon, incgar, incprd, selcol != null ? selcol.CODCLC_CLC : "", strReferencia != null ? strReferencia : "", incdev, increp, increc , incser);
                RepProPro = mae.repProPro;
                RepProProExcel = mae.repProProExcel;

                // Creo el data table donde se almacenara el resumen
                DataTable dtRes = new DataTable();
                dtRes.Columns.AddRange(new DataColumn[2] { new DataColumn("LINEA", typeof(string)), new DataColumn("TOTAL", typeof(double)) });
                //Variables de control
                string strLinea = "";
                double numTotal = 0;
                int numContador = 1;
                // Recorro el datatable
                foreach (DataRow dr in RepProPro.Rows)
                {
                    numContador++;
                    if (dr["NOMLINMON_TMP"].ToString().Trim() == strLinea)
                    {
                        numTotal += Convert.ToDouble(dr["TOTAL_TMP"]);
                    }
                    else
                    {
                        if (numContador > 1)
                            dtRes.Rows.Add(strLinea, numTotal);

                        strLinea = dr["NOMLINMON_TMP"].ToString().Trim();
                        numTotal = Convert.ToDouble(dr["TOTAL_TMP"]);
                    }
                }
                dtRes.Rows.Add(strLinea, numTotal);
                dttResumen = dtRes;
                Mouse.OverrideCursor = Cursors.Arrow;
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }



        void onBuscarReferenciaPropertyChanged(object sender, PropertyChangedEventArgs e)
        {
            try
            {
                if (e.PropertyName == "IsOpen")
                {
                    if (!buscarReferencia.IsOpen)
                    {
                        foreach (string x in buscarReferencia.listaProducto)
                        {
                            strReferencia = x;
                        }
                    }
                }
            }
            catch (Exception ex) { throw ex; }
        }

        RelayCommand _cmdBuscarReferencia;
        public ICommand cmdBuscarReferencia
        {
            get
            {
                if (_cmdBuscarReferencia == null)
                {
                    _cmdBuscarReferencia = new RelayCommand(x => buscarReferencias());
                }
                return _cmdBuscarReferencia;
            }
        }

        RelayCommand _cmdProcesar;
        public ICommand cmdProcesar
        {
            get
            {
                if (_cmdProcesar == null)
                {
                    _cmdProcesar = new RelayCommand(x => consInforme());
                }
                return _cmdProcesar;
            }
        }

        RelayCommand _cmdImprimir;
        public ICommand cmdImprimir
        {
            get
            {
                if (_cmdImprimir == null)
                {
                    _cmdImprimir = new RelayCommand(x => Imprimir());
                }
                return _cmdImprimir;
            }
        }

        RelayCommand _cmdImprimirExcel;
        public ICommand cmdImprimirExcel
        {
            get
            {
                if (_cmdImprimirExcel == null)
                {
                    _cmdImprimirExcel = new RelayCommand(x => ImprimirExcel());
                }
                return _cmdImprimirExcel;
            }
        }

        public void buscarReferencias()
        {
            try
            {
                buscarReferencia.IsOpen = true;
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }

        public void Imprimir() 
        {
            try 
            {
                string seccion = "";
                switch (codsec) 
                { 
                    case "P":
                        seccion = "Programacion";
                        break;
                    case "C":
                         seccion = "Corte";
                        break;
                    case "R":
                         seccion = "Preparacio";
                        break;
                    case "G":
                        seccion = "Guarnecida";
                        break;
                    case "M":
                        seccion = "Montaje";
                        break;
                    case "D":
                        seccion = "Despacho";
                        break;
                    case "Z":
                        seccion = "Consolidado";
                        break;
                }

                DataSet ds = new DataSet("dsProPro");
                DataTable tallejes = ConverTalleje();
                ds.Tables.Add(tallejes);
                DataTable encabezado = new DataTable("ENCABEZADO");
                encabezado.Columns.Add("CLIENTE");
                encabezado.Columns.Add("COLECCION");
                encabezado.Columns.Add("SEPPED");
                encabezado.Columns.Add("SEPORD");
                encabezado.Columns.Add("GAR");
                encabezado.Columns.Add("PRO");
                encabezado.Columns.Add("SEPLIN");
                encabezado.Columns.Add("SECCION");
                DataRow r = encabezado.NewRow();
                r["CLIENTE"]=selcli.NOMCLI_CLI;
                r["COLECCION"]=selcol.NOMCLC_CLC;
                r["SEPPED"] = sepped.Equals("S")?"X":"";
                r["SEPORD"] = sepord.Equals("S")?"X":"";
                r["SEPLIN"] = linmon.Equals("S")?"X":"";
                r["GAR"] = incgar.Equals("S")?"X":"";
                r["PRO"] = incprd.Equals("S")?"X":"";
                r["SECCION"] = seccion;
                encabezado.Rows.Add(r);
                ds.Tables.Add(encabezado);
                RepProPro.TableName = "TMPINFPROPRC";
                ds.Tables.Add(RepProPro.Copy());
                Vista vista = new Vista { ds = ds, reporte = @"reportes\rptInfProPro.rpt" };
                vista.Show();
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }
        public void ImprimirExcel()
        {
            try
            {
                if (RepProProExcel == null)
                {
                    MessageBox.Show("No hay datos para exportar a excel","PROCESO CANCELADO", MessageBoxButton.OK,MessageBoxImage.Stop);
                }
                else
                {
                    FrmAyudasGenericas FrmAyudas = new FrmAyudasGenericas();//FJRF - Creamos una variable que maneje las propiedades del formulario que vamos a invocar
                    FrmAyudas.pStrTituloVentana_Opcional = "INFORME DE PRODUCTO EN PROCESO";//FJRF - Le enviamos un titulo personalizado al formulario

                    FrmAyudas.pDtDatosRecibidosConInformacion = RepProProExcel.Copy();//FJRF - Enviamos los datos sacando una copia de los datos

                    //FrmAyudas.pStrConsultaSql_Obligatorio = StrConsulta;//FJRF - Armamos la consulta
                    FrmAyudas.pStrCampoCodigoDeLaTabla_Obligatorio = "CODIGOREFERENCIA";//FJRF - Le decimos que este es el campo codigo o llave debe tener el nombre final osea el alias si es q lo tiene
                    FrmAyudas.pStrBuscarPorDefectoEnElCampo_Opcional = "NOMBREREFERENCIA";//FJRF - Asignamos el dato a buscar
                    FrmAyudas.pBooQuitarBotonRetornar_Opcional = true;//FJRF - Quitamos el boton de retornar datos
                    FrmAyudas.pBooPonerBotonExportarExcel_Opcional = true;//FJRF - Activamos el boton para que se le permita la exportacion de datos a excel

                    String StrColumnasParaFormato = "T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19, T20, TOTAL";//FJRF - Columnas para formato numerico
                    FrmAyudas.pStrNombreColumnasParaFormatoNumericoSeparadoPorComas_Opcional = StrColumnasParaFormato;//FJRF - Enviamos las columnas que se le van a hacer formato numerico

                    FrmAyudas.ShowDialog();//FJRF - Invocamos el formulario
                }
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
        }

        public DataTable ConverTalleje() 
        {
            try 
            {
                clases.CLSTALTAL tal = new clases.CLSTALTAL();
                DataTable val = tal.consTallajes();
                DataTable talleje = new DataTable("TALLAJE");
                talleje.Columns.Add("CODTAL");
                for (int i = 1; i <= 20; i++)
                {
                    talleje.Columns.Add("T"+i.ToString());
                }
                talleje.Columns.Add("ICO");
                DataRow fila = talleje.NewRow();
                string codtal="";
                foreach(DataRow r in val.Rows)
                {
                    if (!r["CODTJE_TAL"].ToString().Equals(codtal))
                    {
                        codtal = r["CODTJE_TAL"].ToString();
                        fila = talleje.NewRow();
                        fila["ICO"] = "*";
                        fila["CODTAL"] = r["CODTJE_TAL"].ToString();
                        talleje.Rows.Add(fila);
                    }
                    talleje.Rows[talleje.Rows.Count-1]["T" + r["POSTAL_TAL"].ToString()] =r["CODTAL_TAL"].ToString();
                }
                return talleje;
            }
            catch (Exception ex) { throw ex; }
        }

        public DataTable dtLineas()
        {
            DataTable dtMuestra = new DataTable();
            dtMuestra.Columns.Add("CODCLI_TMP", typeof(string));
            dtMuestra.Columns.Add("NOMCLI_TMP", typeof(string));
            dtMuestra.Columns.Add("NROORD_TMP", typeof(string));
            dtMuestra.Columns.Add("CODREF_TMP", typeof(string));
            dtMuestra.Columns.Add("NOMREF_TMP", typeof(string));
            dtMuestra.Columns.Add("CODCOL_TMP", typeof(string));
            dtMuestra.Columns.Add("NOMCOL_TMP", typeof(string));
            dtMuestra.Columns.Add("T1_TMP", typeof(Int32));
            dtMuestra.Columns.Add("T2_TMP", typeof(Int32));
            dtMuestra.Columns.Add("T3_TMP", typeof(Int32));
            dtMuestra.Columns.Add("T4_TMP", typeof(Int32));
            dtMuestra.Columns.Add("T5_TMP", typeof(Int32));
            dtMuestra.Columns.Add("T6_TMP", typeof(Int32));
            dtMuestra.Columns.Add("T7_TMP", typeof(Int32));
            dtMuestra.Columns.Add("T8_TMP", typeof(Int32));
            dtMuestra.Columns.Add("T9_TMP", typeof(Int32));
            dtMuestra.Columns.Add("T10_TMP", typeof(Int32));
            dtMuestra.Columns.Add("T11_TMP", typeof(Int32));
            dtMuestra.Columns.Add("T12_TMP", typeof(Int32));
            dtMuestra.Columns.Add("T13_TMP", typeof(Int32));
            dtMuestra.Columns.Add("T14_TMP", typeof(Int32));
            dtMuestra.Columns.Add("T15_TMP", typeof(Int32));
            dtMuestra.Columns.Add("T16_TMP", typeof(Int32));
            dtMuestra.Columns.Add("T17_TMP", typeof(Int32));
            dtMuestra.Columns.Add("T18_TMP", typeof(Int32));
            dtMuestra.Columns.Add("T19_TMP", typeof(Int32));
            dtMuestra.Columns.Add("T20_TMP", typeof(Int32));
            dtMuestra.Columns.Add("TOTAL_TMP", typeof(Int32));
            dtMuestra.Columns.Add("CODLINMON_TMP", typeof(string));
            dtMuestra.Columns.Add("NOMLINMON_TMP", typeof(string));
            dtMuestra.Columns.Add("NROPED_TMP", typeof(string));
            dtMuestra.Columns.Add("CODLIN_TMP", typeof(string));
            dtMuestra.Columns.Add("NOMLIN_TMP", typeof(string));

            return dtMuestra;
        }
    }
}

